
package co.edu.usbcali.presentation.backingBeans;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import java.io.Serializable;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.primefaces.event.map.OverlaySelectEvent;
import org.primefaces.model.map.DefaultMapModel;
import org.primefaces.model.map.LatLng;
import org.primefaces.model.map.MapModel;
import org.primefaces.model.map.Marker;

import co.edu.usbcali.modelo.Eventos;
import co.edu.usbcali.modelo.dto.EventosDTO;
import co.edu.usbcali.presentation.businessDelegate.IBusinessDelegatorView;


@ManagedBean
@ViewScoped
public class MapEventView implements Serializable {
	private static final long serialVersionUID = 1L;
	
	private MapModel emptyModel;
    private String nombre;
    private double lat;
    private double lng;
    private String direccion;
    private Date fecha;
    private String fecha2;
    private Date hora;
    private String hora2;
    private String paginaEvento;
    private List<EventosDTO> listaEventos;
    private Marker marker;
    @ManagedProperty(value = "#{BusinessDelegatorView}")
    private IBusinessDelegatorView businessDelegatorView;

    public MapEventView() {
        try {
            emptyModel = new DefaultMapModel();
            listaEventos = new ArrayList<EventosDTO>();
            listaEventos.addAll(businessDelegatorView.getDataEventos());

            for (int i = 0; i < listaEventos.size(); i++) {
                EventosDTO e = new EventosDTO();
                double latitud;
                double altitud;

                e = listaEventos.get(i);
                latitud = Double.parseDouble(e.getLatitud());
                altitud = Double.parseDouble(e.getAltitud());
                emptyModel.addOverlay(new Marker(new LatLng(latitud, altitud), e.getNombre(), e, "http://maps.google.com/mapfiles/ms/micons/blue-dot.png"));
            }
            direccion = "";
            paginaEvento = "";
        } catch (Exception ex) {
            FacesContext.getCurrentInstance().addMessage("Error", new FacesMessage(ex.getMessage()));
        }

    }

    public void onMarkerSelect(OverlaySelectEvent event) {
        setMarker((Marker) event.getOverlay());
        Marker m = getMarker();
        Eventos e = new Eventos();
        e = (Eventos) m.getData();

        DateFormat df = DateFormat.getDateInstance();
        String s = df.format(e.getFecha());

        direccion = e.getDireccion();
        hora2 = e.getHora();
        fecha2 = s;
       // paginaEvento = e.ge;
        nombre = e.getNombre();

    }

    public void cancelar() {
        nombre = "";
        direccion = "";
        fecha = null;
        hora = null;
        paginaEvento="";
    }

    public void addMarker(ActionEvent actionEvent) {
        try {
            if (nombre.equals("") || getDireccion().equals("") || getFecha() == null || getHora() == null || getPaginaEvento().equals("")) {
                FacesContext.getCurrentInstance().addMessage("Error", new FacesMessage("Hay un campo vacio"));
            } else {

                Eventos e = new Eventos();

                if (hora.getHours() == 0) {
                    if (hora.getMinutes() == 0) {
                        e.setHora("00:00");
                    }
                } else if (hora.getMinutes() == 0) {
                    e.setHora(hora.getHours() + ":00");
                } else {
                    e.setHora(hora.getHours() + ":" + hora.getMinutes());
                }

                e.setFecha(fecha);
                e.setNombre(nombre);
               // e.setImagen(paginaEvento);
                e.setAltitud(lng + "");
                e.setLatitud(lat + "");
                e.setDireccion(direccion);

                businessDelegatorView.saveEventos(e);

                emptyModel.addOverlay(new Marker(new LatLng(lat, lng), nombre, e, "http://maps.google.com/mapfiles/ms/micons/blue-dot.png"));
                FacesContext.getCurrentInstance().addMessage("Mensaje", new FacesMessage("Evento Agregado "));
                //return "mapEventAdd.xhtml?faces-redirect=true";
            }
        } catch (Exception ex) {
            FacesContext.getCurrentInstance().addMessage("Error", new FacesMessage(ex.getMessage()));
        }
        //return "";
    }


    public MapModel getEmptyModel() {
        return emptyModel;
    }


    public void setEmptyModel(MapModel emptyModel) {
        this.emptyModel = emptyModel;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public double getLat() {
        return lat;
    }


    public void setLat(double lat) {
        this.lat = lat;
    }


    public double getLng() {
        return lng;
    }


    public void setLng(double lng) {
        this.lng = lng;
    }

    public String getDireccion() {
        return direccion;
    }


    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }


    public Date getFecha() {
        return fecha;
    }


    public void setFecha(Date fecha) {
        this.fecha = fecha;
    }


    public String getFecha2() {
        return fecha2;
    }


    public void setFecha2(String fecha2) {
        this.fecha2 = fecha2;
    }

    public String getHora2() {
        return hora2;
    }


    public void setHora2(String hora2) {
        this.hora2 = hora2;
    }


    public String getPaginaEvento() {
        return paginaEvento;
    }


    public void setPaginaEvento(String paginaEvento) {
        this.paginaEvento = paginaEvento;
    }


    public Date getHora() {
        return hora;
    }


    public void setHora(Date hora) {
        this.hora = hora;
    }


    public List<EventosDTO> getListaEventos() {
        return listaEventos;
    }


    public void setListaEventos(List<EventosDTO> listaEventos) {
        this.listaEventos = listaEventos;
    }


    public Marker getMarker() {
        return marker;
    }


    public void setMarker(Marker marker) {
        this.marker = marker;
    }
}